GtkFlowBoxChild *cursor_child;
GtkFlowBoxChild *selected_child;
- gboolean active_child_active;
GtkFlowBoxChild *active_child;
GtkSelectionMode selection_mode;
return i;
}
-static void
-gtk_flow_box_update_active (GtkFlowBox *box,
- GtkFlowBoxChild *child)
-{
- GtkFlowBoxPrivate *priv = BOX_PRIV (box);
- gboolean val;
-
- val = priv->active_child == child;
- if (priv->active_child != NULL &&
- val != priv->active_child_active)
- {
- priv->active_child_active = val;
- gtk_widget_queue_draw (GTK_WIDGET (box));
- }
-}
-
static void
gtk_flow_box_apply_filter (GtkFlowBox *box,
GtkFlowBoxChild *child)
child = gtk_flow_box_get_child_at_pos (box, x, y);
- gtk_flow_box_update_active (box, child);
-
if (child != NULL)
priv->rubberband_last = child;
}
/* Event handling {{{3 */
-static gboolean
-gtk_flow_box_enter_notify_event (GtkWidget *widget,
- GdkEventCrossing *event)
-{
- GtkFlowBox *box = GTK_FLOW_BOX (widget);
- GtkFlowBoxChild *child;
- gdouble x, y;
-
- if ((gdk_event_get_window ((GdkEvent *) event) !=
- gtk_widget_get_window (GTK_WIDGET (box))) ||
- gdk_event_get_coords ((GdkEvent *) event, &x, &y))
- return GDK_EVENT_PROPAGATE;
-
- child = gtk_flow_box_get_child_at_pos (box, x, y);
- gtk_flow_box_update_active (box, child);
-
- return FALSE;
-}
-
-static gboolean
-gtk_flow_box_leave_notify_event (GtkWidget *widget,
- GdkEventCrossing *event)
-{
- GtkFlowBox *box = GTK_FLOW_BOX (widget);
- GtkFlowBoxChild *child = NULL;
- gdouble x, y;
- GdkNotifyType detail;
-
- if (gdk_event_get_window ((GdkEvent *) event) !=
- gtk_widget_get_window (GTK_WIDGET (box)))
- return FALSE;
-
- gdk_event_get_crossing_detail ((GdkEvent *)event, &detail);
-
- if (detail != GDK_NOTIFY_INFERIOR)
- child = NULL;
- else if (gdk_event_get_coords ((GdkEvent *) event, &x, &y))
- child = gtk_flow_box_get_child_at_pos (box, x, y);
-
- gtk_flow_box_update_active (box, child);
-
- return FALSE;
-}
-
static void
gtk_flow_box_drag_gesture_update (GtkGestureDrag *gesture,
gdouble offset_x,
}
}
-static gboolean
-gtk_flow_box_motion_notify_event (GtkWidget *widget,
- GdkEventMotion *event)
-{
- GtkFlowBox *box = GTK_FLOW_BOX (widget);
- GtkFlowBoxChild *child;
- gdouble x, y;
-
- if (!gdk_event_get_coords ((GdkEvent *) event, &x, &y))
- return GDK_EVENT_PROPAGATE;
-
- child = gtk_flow_box_get_child_at_pos (box, x, y);
- gtk_flow_box_update_active (box, child);
-
- return GTK_WIDGET_CLASS (gtk_flow_box_parent_class)->motion_notify_event (widget, event);
-}
-
static void
gtk_flow_box_multipress_gesture_pressed (GtkGestureMultiPress *gesture,
guint n_press,
gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED);
priv->active_child = child;
- priv->active_child_active = TRUE;
gtk_widget_queue_draw (GTK_WIDGET (box));
if (n_press == 2 && !priv->activate_on_single_click)
{
GtkFlowBoxPrivate *priv = BOX_PRIV (box);
- if (priv->active_child != NULL && priv->active_child_active)
+ if (priv->active_child != NULL &&
+ priv->active_child == gtk_flow_box_get_child_at_pos (box, x, y))
{
if (priv->activate_on_single_click)
gtk_flow_box_select_and_activate (box, priv->active_child);
GtkFlowBoxPrivate *priv = BOX_PRIV (box);
priv->active_child = NULL;
- priv->active_child_active = FALSE;
gtk_widget_queue_draw (GTK_WIDGET (box));
}
object_class->get_property = gtk_flow_box_get_property;
object_class->set_property = gtk_flow_box_set_property;
- widget_class->enter_notify_event = gtk_flow_box_enter_notify_event;
- widget_class->leave_notify_event = gtk_flow_box_leave_notify_event;
- widget_class->motion_notify_event = gtk_flow_box_motion_notify_event;
widget_class->size_allocate = gtk_flow_box_size_allocate;
widget_class->unmap = gtk_flow_box_unmap;
widget_class->focus = gtk_flow_box_focus;